package com.decent.web.config.cors;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

import java.util.ArrayList;
import java.util.List;

/**
 * 全局跨域配置
 * 基于Filter
 *
 * @author lilinjiang
 */
@Configuration
public class GlobalCorsConfig {
    /**
     * 允许跨域调用的过滤器
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //开放哪些ip、端口、域名的访问权限，星号表示开放所有域
        List<String> origins = new ArrayList<>();
        origins.add("域名");
        config.setAllowedOrigins(origins);
        //允许跨域发送cookie
        config.setAllowCredentials(true);
        //允许HTTP请求中的携带哪些Header信息,*放行全部原始头信息
        config.addAllowedHeader("*");
        //开放哪些Http方法，允许跨域访问,*允许所有请求方法跨域调用
        config.addAllowedMethod("*");
        //暴露哪些头部信息（因为跨域访问默认不能获取全部头部信息）
        config.addExposedHeader(HttpHeaders.ACCEPT);
        //添加映射路径，“/**”表示对所有的路径实行全局跨域访问权限的设置
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);
        return new CorsFilter(configSource);
    }
}